{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Multimodal Messages with OpenAI Vision\n",
    "\n",
    "**Note:** This feature is currently in preview and only available on `rc` branches, starting with `0.0.182-rc.0`. The message schema may change in future releases.\n",
    "\n",
    "OpenAI supports interleaving images with text in input messages with their `gpt-4-vision-preview`. Here's an example of how this looks:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "AIMessage {\n",
       "  lc_serializable: \u001b[33mtrue\u001b[39m,\n",
       "  lc_kwargs: {\n",
       "    content: \u001b[32m'The image says \"LangChain\". It includes a graphic of a parrot on the left, two interlinked rings (or'\u001b[39m... 105 more characters,\n",
       "    additional_kwargs: { function_call: \u001b[90mundefined\u001b[39m, tool_calls: \u001b[90mundefined\u001b[39m }\n",
       "  },\n",
       "  lc_namespace: [ \u001b[32m\"langchain\"\u001b[39m, \u001b[32m\"schema\"\u001b[39m ],\n",
       "  content: \u001b[32m'The image says \"LangChain\". It includes a graphic of a parrot on the left, two interlinked rings (or'\u001b[39m... 105 more characters,\n",
       "  name: \u001b[90mundefined\u001b[39m,\n",
       "  additional_kwargs: { function_call: \u001b[90mundefined\u001b[39m, tool_calls: \u001b[90mundefined\u001b[39m }\n",
       "}"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "// Deno.env.set(\"OPENAI_API_KEY\", \"\");\n",
    "\n",
    "import { ChatOpenAI } from \"npm:langchain@0.0.185/chat_models/openai\";\n",
    "import { HumanMessage } from \"npm:langchain@0.0.185/schema\";\n",
    "\n",
    "const chat = new ChatOpenAI({\n",
    "  modelName: \"gpt-4-vision-preview\",\n",
    "  maxTokens: 1024,\n",
    "});\n",
    "\n",
    "// Messages can now take an array of content in addition to a string\n",
    "const hostedImageMessage = new HumanMessage({\n",
    "  content: [\n",
    "    {\n",
    "      type: \"text\",\n",
    "      text: \"What does this image say?\",\n",
    "    },\n",
    "    {\n",
    "      type: \"image_url\",\n",
    "      image_url:\n",
    "        \"https://www.freecodecamp.org/news/content/images/2023/05/Screenshot-2023-05-29-at-5.40.38-PM.png\",\n",
    "    },\n",
    "  ],\n",
    "});\n",
    "\n",
    "await chat.invoke([hostedImageMessage]);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You can also construct `ChatPromptTemplate`s with these multimodal messages to create chains:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "\u001b[32m`Arrr, matey! The image be showin' the text \"LangChain,\" with a colorful parrot on the port side and `\u001b[39m... 52 more characters"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import { ChatPromptTemplate, MessagesPlaceholder } from \"npm:langchain@0.0.185/prompts\";\n",
    "import { StringOutputParser } from \"npm:langchain@0.0.185/schema/output_parser\";\n",
    "\n",
    "const prompt = ChatPromptTemplate.fromMessages([\n",
    "  [\"system\", \"Answer all questions like a pirate.\"],\n",
    "  new MessagesPlaceholder(\"input\"),\n",
    "]);\n",
    "\n",
    "const chain = prompt.pipe(chat).pipe(new StringOutputParser());\n",
    "\n",
    "await chain.invoke({\n",
    "  input: [\n",
    "    hostedImageMessage,\n",
    "  ],\n",
    "});"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You can also pass in a base64 encoded data URL, convenient when reading from fetched images or from the filesystem:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "\u001b[32m\"Arrr, matey! What ye be starin' at is a fine image of a hot dog, perched in a soft bun, ready to be \"\u001b[39m... 182 more characters"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "// const imageData = await fs.readFile(path.join(__dirname, \"/data/hotdog.jpg\"));\n",
    "// const imageBase64 = imageData.toString(\"base64\");\n",
    "const imageBase64 = \"/9j/4AAQSkZJRgABAQEBLAEsAAD/4QBWRXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAAITAAMAAAABAAEAAAAAAAAAAAEsAAAAAQAAASwAAAAB/+0ALFBob3Rvc2hvcCAzLjAAOEJJTQQEAAAAAAAPHAFaAAMbJUccAQAAAgAEAP/hDIFodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0nYWRvYmU6bnM6bWV0YS8nIHg6eG1wdGs9J0ltYWdlOjpFeGlmVG9vbCAxMC4xMCc+CjxyZGY6UkRGIHhtbG5zOnJkZj0naHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyc+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9JycKICB4bWxuczp0aWZmPSdodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyc+CiAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICA8dGlmZjpYUmVzb2x1dGlvbj4zMDAvMTwvdGlmZjpYUmVzb2x1dGlvbj4KICA8dGlmZjpZUmVzb2x1dGlvbj4zMDAvMTwvdGlmZjpZUmVzb2x1dGlvbj4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PScnCiAgeG1sbnM6eG1wTU09J2h0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8nPgogIDx4bXBNTTpEb2N1bWVudElEPmFkb2JlOmRvY2lkOnN0b2NrOjdlNWJlOGE1LWQwMmQtNDFiMS1hMWM5LWRjYzJlNTcyZTNmNzwveG1wTU06RG9jdW1lbnRJRD4KICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjBkMDgwOTI4LWY2YzMtNDQyNy05ZGI5LWEwZjdiYTI2YWNhYTwveG1wTU06SW5zdGFuY2VJRD4KIDwvcmRmOkRlc2NyaXB0aW9uPgo8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSd3Jz8+/9sAQwAFAwQEBAMFBAQEBQUFBgcMCAcHBwcPCwsJDBEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEFBQUHBgcOCAgOHhQRFB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e/8AAEQgBaAIcAwERAAIRAQMRAf/EAB0AAQACAwEBAQEAAAAAAAAAAAADBAIFBgcBCAn/xAA8EAABBAEDAgUCBAQGAgICAwABAAIDEQQFEiExQQYTIlFhB3EygZGhFCNCsQhSwdHh8BViM3Ik8UOCkv/EABsBAQACAwEBAAAAAAAAAAAAAAACAwEEBQYH/8QANhEBAAICAgICAQIEBQQCAQUAAAECAxEEIRIxBUFREyIyYYGRBkJxodEUI8HwseE0FTNykvH/2gAMAwEAAhEDEQA/AP2WgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgqZeoY2Nw99n2C1snKx4+pldjwXv6a6bxAxt7ISfuVp3+Sj/ACw2q8CfuVCbxTK08Qx/mVTb5S0fS6Pjq/lLpnigT5bIMiJrQ80HA9FZx/kv1L+NoQzfH+FfKsumXXcwQCQBZKDkPFP1G8LeH3uhyM7+IyG9YscbyPuegWjn+QwYepnc/wAnY4XwXM5cbrXUfmenm+vfXfKc50ejaPFEO0mQ8vP6CguZk+ameqV/u9Jx/wDB9KxvNk3/AKOdf9avGjbeH4Jrnb/DilnH8nmtPel+T/DXCrHUT/dsvCv+I+F+azE8QaTQc7b52NYPz6T1/VdOnKtr90OFn+CxzMxhv3+J/wCXunh3XtK8QYIzNKzI8iI9aNOafYjqFtUvF43DgcjjZePbxyRps1NQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIMJZY4m29wChfJWkbtKVaTb01+TqzGWImbj7laN+dH+WG3ThzP8AFLXT6vOXi3jb3DVp5OZlmfbapxKa9NFqmfumcQei0sl5nbbxYvGIat+eCTZK1cV9zMy2Jxqb8nzPS53qtU5Z8+o9ra18e0ONqJxs9m8Ajd1UONmnDljySyYf1KTp6/p2THl4UU8ZBa5o6L3WO8XrFoeRyUmlprLlvGn1E0Dw218T5xl5jf8A+CFwNH/2PQLT5PyOHB1M7n8Ov8f8Fyub+6I8a/mf/D8/fUb6veJdYc7Hx3DGxD1ihcQK+T1K4mT5C/Kma71H4h7Li/BcfgRF/Hyn8y87wtcOdkGCcmObqWnv8j3WtfjWr+73DtYeXjt1HtvMaNu3p+axWsQsm+0k0TdvH6hZiNSjMRMOa1zSHSy+bC/Y/rXYrew8jxjVnNz8SLTuOna/S3xJqfh7UYsjGmeHAgPYfwvb3B+Fs05XjaJhqcrgU5GKaXh+s9A1vD1fSoc+F4YHttzXdWnuF2IzUmvlt88z8a+HJOOY9NhHLHJ+CRrvsVmuStv4ZUzW1fcM1NEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBBi97WN3OIA+VG1orG5ZiJmdQoZeoANPlkNaP6iufl5u/4G3j435c7qmqY7S5xeXOHclcnLmr7mXTw4LenOT+Irt7WGlox8h9xDfjh66lp83xDO6tnpddge4VNuZefXTYrxax7RS6k/Id5pBa6lK2ack+RXDFI8VWWceZvElOPNEqqa97iVkV61phmZZcGuY4Ajn7qWWdzFo9mOmupa7UdREbd8pa09eD1Wte1pnuG7x+LOTqrVap9QdZZgvwMPOkghPBDHUT+a3K/IZ4x/pxbp0+P8DxovGS9dz/Nw+TkTZDi9zjz7qitJtPbtxFaRqETIYnOt7QXDutmlfHtTkmZ6UNV0JuQ9mTjEwysNgjoSuji5ERGrOVl4f7vKs6bjBLhCBKPXXIC1ra3026biNSlkfTDRH5rCW1WMPyJBGxu4uNUAmplC9oiNy9v+mX03w9Pwo9V8Qwb8p3qixn9GD3cO5+FtxSMdd39vIfJfLXyX/S489fc/8PR97WsDImhjB0DRQUZyTb04sU73PtXMjmO3McR9uErM1ncSn4xPUr2HrM0VNm/mt/cLfw821er9w1cvDrbuvTf408eREJYnW0rrUvF43Vzb0mk6lIpoiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgEgCysTOhRytRijBETg53vfC0c/OpTqnctrHxrW/iaLP1hotzpA4j3PAXIy8q1p3aXSxcTX05rUNadI4gSWfZaOTkb9S6OPjxWPTSvmdLK4PdYPYrWiJvOp+2zMeMdKc9kFrXCvcpGP6hKLfctdPG2i5oNjsSsTSNdLYtJ5vlhtMNnqfdT9a6Y1varmygRue9hBaeCT1Ub+tyuxUm06q0mp695cBYNoHz1VNsu407PG+MjflZxWsatLqG6Jr3gHiwqa3/c7UcWMdemoc3IxJYy97qPUOPX7FdGuCs9xDRnkXxzqe4bfEkZLGC2lZ+n4+04y+XcJiGtNg0mu0vLpnv9Bs8KekJnas+YNfx17FNITOmzwvD2uahG2bE03LmY9u8ObESCLqx+alFJ/DVy8zDjnU2iHsX0v+l7dJkh1jxDtOUynxYwNhh7Fx7n47Lcx4op+63t5X5P5qc0Tiwevuf+Ho2W6NziepVOXV5lx8cTEKb5A1u0WoxMQuiNyge8dSVncJaRl4PdPJnS5omouw8sNkf/ACXmnD2+VtcTkzivqfUqOTx/1abj27EEEWOQvQOGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIK2VmwwAgu3O9gtXNy8eL37XY8F8npzWsa+GvLHkgdmjp/yvP8v5K158Z6h2eNwOvKHL5+sTPNNcDt5C5V+Rbbq049YhqnTy5BcHyEWffoqom+WNTK3UU9MNjIQTRd7FX0wxRC15srTuJ4a6ndQs2jXpKv5lBO5/kgubVHqO4U534bmGYiN9ImgNApwIroeoWa1SlodY1iDGBjbMC8dXXwFTkyRXp0+L8ffLPlaNQ5TVPERlFMmLu1g8LVvlmXoePwseP1DQ5Bky3EkvIHXlYpjnJLe8oxxpPFBGyJtCndTa6GPFWsdNW2SZljkReYza+nA9lsRPi171i7HFhbFwzhLX2rrTwTmWm0SsJzpVdlEPLObPRZRl1P068F6l4u1TyYR5WOwbpp3tO1g9vkn2VmLHOSenL+S+Rx8PH5W9/h+ntE0+DRNHxdPjldMMeIRNkeBZA+y6NrxWIj8Pn2bJbkZJvMa32xyJ91kG1p2vMraY9KMkllVtiIV5HX1WJ7ThC8kO62357LGk4hC9xDuvCxvtOIRyO54KxafwzWHaeE83+L0trHH+ZD6HfbsV6H47N+piiJ9w4XOxfp5dx6lt1vtIQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQR5E8UDN8jgB2HcqvLlpijdpTpjtedVaDV9aLWUJBAzuOrz/ALLg8z5S2tVnUf7urxeDEz63P+zkNT117gWRelg6hp5P3K4WXlTPp28XErXufbR5U807g4vJP9lrW8rdy2oiK9EePKB5kjwR2V9MGTXlb0qtkr6hhK5oJLQSTwTSzMVidwxG59jITI0Bxc3i7C2KYptERLE3is7YSxx7q324d/ZXThr+e2IvLX6lm42JG4zSRgD+kjqo2mKe2zgwZM0xFYcLrviJ7t4jk8qI9r5K5982/T0/D+LrTU2jcuTy8t2Z/LDXOB6noqImbS604vGGpkw8jFex43iMHp2P3XSrji9e47cjLfJituJ6bbTMlj29BfQtKl+jFPS2nI/VhdkogFvT2PZSiViEltE2pTLMzpE+U1fRwWZjpCZhWnyT+Ijn4UZtFUNO/wDor4CPjDUJc7MnkxsLDc0ksb6nuu6BPTp1WxxsU5f3TOohw/mflI4VIrWNzL9LsjxcGN0eLCyPcdz9rQNzvc/K38mSI6h4T9+Wd3lTyZrJ6rVtLYpVTe6z3ChqIWxCAuJ70FHtZqEEzgBVWozCdVaR3FXR91G1ltYV5ptv4yqb5Ij2srVG6axwozkmUoo23g3UDj6y2En+XP6D9+y6PxnI8M3jPqemj8jg8sXl9w9AXp3nRAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEFDO1OGC2M/mSew6D7rn8n5DHh6juW1h4tsnc9Q5HVtaaxxe97pXE9zQC8zyOZN58rTt38HC61HTl9Q1J+RuAa1oPcLnWvN49OlTHFFCNskzqIA4pMeObJXtEJI3bC1g6jg2Fbi/bMQqv3uX1xlM59QAPa6V8VvN0P2+LAZPlWKa5xJpXY58fbFqeSjkZ0kVOLgAByCOifqzGtLq4Yt057WvE0UIP8O8b+heT6f8AlUZeVEevbrcT4q1u8npxuo6w7Jlc8zGR7v6iVoXzTae3pOPxqYq6rGoamWN8sgLg51i1muPynttfqRDOJrIx6aFcLex44r6UXvMk7mPYRd+4WxXprXr5e1JmP5MvmM/q7XwrJnbXjHFZXmSksA3VXUKrXa3eleaYBT3pjcy+aU0ahq+NgHIigE0rWGWV21jAT1J7BQi3naKwpzX/AE6Wvren6O0H6KeEoIPMypJ9R3hpDzIAAOvp2+66UcLHX328NyP8R8m06rHi9BijxNPxxjYUEWPC3oyNgaOnws2vrqHH/dknyvO5UsnJP3VU2X1ormTi/dRm0aWRG+kUjt3CjvacRpWmk28FQtbSysbVjLuv2VUX2u8dK80oNi9pVVrxPSytdKeRI0N2FwJ7Fa2S8R+3a+lZ9qwL2tJc4EfdVxForuZTmImdRDGDMkgyY5W0NrgQfkKeLNalotBkxRes1l7NjSibHjmb0e0OH5hfQKW8qxb8vEXr42mPwkUkRAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEGMsjImF73BrR3KhfJWkeVp6SrWbTqHN63r8bGujgeD8A8n7+y89zflJmPHG6/E+Ome7w4nV9dnl/A7Y3ptB6LzuXlWt/J38HEpRomumlkLnOdR91r462m223a1YrpmI9jhduJ6gqzU1mIV+UTCxOWtYKafst21Y8WvWZ2jfkROZTWgP6BWTNPGNe2IrO/wCSGd9uYZHdq47LMzvW2axremm1PVsXBc4TOcZBy0NItU2yVrP7vbocbhZeR/D6cZr/AIikyZT5j9jT0jZ/qtTLyJtPb03D+Lphjrufy5PUjJqFxjfXx0CxgmZtvTaz4/GmttVF5mLNVPDRw4dj8hdKcNbxtyY5N8NtW9N7i5LHxhze/ZYjH4t2MsXgk3Nsjkeyn4pTZE5/s0BS0x5QwkktvX7JCNleTKDRtHX7qF8kVVx23Hg/wd4l8ZSTN0XCMzYa8x7nhjW30FlRpiy5/wCFp8z5Dj8OI/VnW3vvgP6L+G9Dhx87XWnUdQDWufG938lj+4AH4hfuunj4eLFG7dy8bzf8QcjkTNcP7a/n7/8Ap6NPlMiiEWOxrWNG0NaAAFZfN1qrjUwzM7s1+RIXDmjarbFYhTlsjrShau4W1RuIBHNqm0rIRSzFvWlib6hOtFWZ5I6j7qq25XViFaR4Y27slVTPjCyIm0oJZG9a697Vd7196WVrLX5Dy2bcbr2JWjedW22aRuulTJlBfVBjR1NKPlEra16/KhlSO3BwALB3DuE+1taxp7Z4GyTleFNPlLrPlbT+Rr/RfQPjr+fGpP8AJ4X5Gnhybx/NulvNIQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEFfMzcfFaTLI0H2ta2flY8P8UrsWC+Wf2w4TxP4gdlPMcMpawe3ReQ5/yN+RfxienpeDwK4Y8rR25DIy3Pc7aS73XItPe4daK/lWLHOaHnp7BPHVYmGfLvSb+JhiZb2U5y2qXpjru32pmlrz0wfMXkmN1kqyJ33VjWvb4ZpC073tHPJJ5V9ZtaO0fGsSqZs+PEBJNMGNbyT7rFqx1Mysx0vedVjcuX1zxK57HQ4ZLI+7z1P2Wrl5P1V3+F8TET5Ze5/DjM/OMjjchJ6lxPVanl5dPQ48cUjqGt2F8hcSaPU+6ux8byntZbNqOlmNuzpQHYLoUxxWNQ1b38kWZE2dnqq1fWddOfmwxdT06KaJ0gmk324lp6UPZTvMShhpNOl9zjVn2VemyrvfQIPKzEwjadKhdJLMIcdjpJHkNa1osk+wHuqJvMzqEbWiI3L2j6U/RSfMgyM3xthux4JoR/DQiXbMx24HcQOnAqj79FvYODuN5oeT+U/wAQ1paKcSdzE9/h7npGnaN4d01mn6Rhw4eOzoyMdT7uPUn5K3ZtTHXVenlMmTPyr+eWdyjyMx0i1rZZsupiiqm55ceeFD2u1pDLJXVTiSIVnTUTwOvVVXvqF1aInnjdZAWv77WR+EEr6bbisWnxjtOsd9K0szbLSeO491TbJETpbWkz2qyFo53EUqZmvva6IlVyHtLLDvuqMlomPa6kSpzPcW+5byqphZXTXZeQ4kt/UX1Vc7bWOsRG2ujI84wF1m+CDwR7K7HXcp5Oq+T3H6YG/B2JQ4DngfbcV7r4n/8AFr/V4T5b/wDKt/R066TmiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIMJpY4YzJK8NaOSSoZMlccbtOoSrS151WHM6n4qh3GLEaTxy53C8/yPmvO3hhj+vp2MHxMxHlllw+sa3lSTuHnlwP6WvNZ+Tlm89vQYOLjrXqGjcZsgktdZHytSa2t/D7bcTWvtYZGyEG27jX3W5jxxWO+5a9rzb0rumeHgsb+qqm3jbqE4rGtTJmDeA6TgdeOy2MlP1JibI47ePUKz5g2MSRtJ29/dWViNRMfTOp3qWh1PW2RyOq5HntfAVeTNEOpxfjL5IiZ6hyWr61JO4tknBLejAbDVq3yzb3L0XH4NMMfthx+dqGqfxJ2SM8sf0k9QtrDhx3p3vavPyLYbeulvT8mHLiEkdk3/V2Up4s4ynMjIuyFobQs2tisdblPzRlzebqlbCM9w+eY0dE+0ZjcIyQSa4SVXUMZpg1vVYteKx2x3PS34W8O674u1MYGhYEmRJx5jxwyMe7nHgBV0pkz21SGty+Zh4lPPLbUf8Avp+nvpl9MtB8E40eVK1mdrG315bxww+0YP4R89T8LsYePj48b9z+Xz/5L5jPz7TWvVPx/wAuxyMgE/jUrZN/bn0xaa6d293JWreNtqvSN749pDeVj9vqEtSpzuLBwo9wnGpUpZjfPP8AooWvpdWjCN1u7qqLbWa1A+Wm0SseWoIruVGaYm2urg9vZUXyb9r6113CpJIQ123j2Wt5TG9LohVdKAPUbVXlGl3j+FSWZhO4P2gGueihMxK2KzCvLk9Qwij1pY39Qsin5aqZ+2QuA9J6/dJjbYr3GmLY2lltoPPO4e6upHSF7zv+T3P6YNcPBGnl9bnNcT//AKK9z8ZGuLR4X5WYnl31/wC9OlXQc4QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQfHuawW4gBRtetY3MsxEz6ajUdcx8fcA8Aj3XI5Hyla7ivTfw8C99TpyHiHWzOOJhIKtoHRcPmcn9SNzbbt8Tixj+tOSflTyvdvND3C4tb5LWny9OvNK1iNI8eBkspG4kt5Knhx1yX8Yn0xkyTWu/ygiyG42VI4xnaeFTjtGLLa8wnek3pERKV0nnxlwJ2k8Bb/wD+5XdfTX8fGe0D8lzHujouZ8t5UYtO/GY6WeG9WVtS1HDZEZMiYMoVsA5cfsrrZKRG5Wcfi5clvGkbcXq2tufubCfKZ97JWjbLP16en4vxlcepv3LltR1GV4LIz5f+Y9SVVufp2aY6w14he5hoANIsNvqr8eCZjcsXyx6hk9jBAYZAXNI9l0cM/p9OZycf6kdtXjt/hMxzmBrWOdzXf5W3fVq9S5eKJxX03cWQJG7COvxytb1LoVtuH2VgYCD1U43MM7VieCDxShvomVd021xs3yq5vpGXc/Sf6aar46zBlzF+HosT6lySOZPdkfufnoP2V/G4tuRPlP8AC4vyvzOLgV8Y7vPqP/Mv1F4e0TRfCukt0zRcKPFx28nby57v8zndSV2P2Yq+NI1DwGfPn5mT9TNO5/8AfT7l5Ida1r22sx0018koPAP7KlsRDF0nHwpT6YiEL5OOoVazStPISeOVi19LK1VaBsuP5rV/i7lsR0wMoY3qSsecV9s6mVXKyKaSbB9lVkyTEbWUp9Kc0oLaH6+6ovby6W1rqVObIZtIJ/L3VMzEwvrWdtfO5sj2gSUO9lVa3LYrusdwqZElNLbDj/ZJ6hbWN9qE2QRfJb8gpWO10VYMkaNu+TcflX1iIlG0TPqEcWR/PYzkA80rafiUb06mX6J8DR+X4S0xtAXAHcfPP+q93wq+PHpH8nz3nzvk3/1bpbTUEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAJrqm9ClmahDA1x3iwLPP/AG1z+Rz6Y4nXbYxca95cn4g8RSNsYxsVy40vN875LJPde3d4fx1f87kczLEjbm3Oc/krk6867v8Abr1jxnVfpQbc9DlrWrFaecREfSfl4I5WGGTi3d+fhYnHNLaZi0WhIzMa14bGwMLhZ7LapetbarGtqrY5mNzKjqUrGMLn+on2VGekRO1+GJnqEcuW2Bjd5LWV1oUPurvKaxH4KYpyT17c/rPiUwBzcOQur+vsqsmfXVXa4nxHl+7N/Z53qPiwT5krJS5zh+N56fqoxx8to8/y7FcnHwfsidaQx5jcqjHIHAngjuqpw2i2pbVc1bRuGbWk3Yse/utimLUozk2B7rALeO1LbpGupU2szkcQ0mj9lZtVbuFKaES2SwCjwQrd9dNaYmZ7ZNcAQb5Cr9sx0+STCuXKPlpKZ/CLDhzdSzo8DTsWbKyZnbY4omlznE+wCj3aYrXuVV8lcdZvedRD3P6XfQ4wzDVvHTI3AAGPTmybufeRw4//AKg/c9lvYODFP3Zv7f8ALyXyX+I/KP0uJ/8A2/4/5e3edBiY7MXEiiggjG1kcbQ1rR7ADotvJn1Gq9PMVxTefK87mVHIyNw4JWvN9titNSpPkruSoRK7SGWXmkmUoqjMwoD2WPKNaZ8JQvk9W0nqo2vEdJxT7RyU00ep+VRknS2sbQSPBaW9lTNutLIjtTyZgPz4+ypyW+1tKtdlzjvx7fK1smRsUpMtVlZZBawG2gdFrze3UNzHi+0U8xfE6iWk82sxuY6ZisRLXyylpIkJIFG6WIhsRG/SuXNfJYlon1cqfilvUa0i8wND9xsjse6tisk96U5ZGPJuxfIBCzEfae9JsB3nTsjby8uDAB7nhbWKu9Q1837YmX6k02AYun4+MBXlRNZ+gAXvsdfGsV/D5pkt53m35WFNAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQV8zMhxmF0jhx2tavI5ePDG5W4sN8k6hzmqa+4R7mkNHsvP8r5O9436dfj/AB8b1Lkda1wuc4sJHza4ufl7np2cHFisaclqWdlPeGQvq+pHVaVtz96l0KVrH0sY5kMcb5ATfp91bSZ6n2haI3MQlfNHA94JeHE2K5CviK45navVrxCOfJD5WOp3yFO1oteJYrSYiYVMp8ZnBB2VYscqN6xN9rKbiumj1PV4YIfKe7e9vQDqqfLVdT7dTjfH3zW8vUOU1fXpJZWxyyFwqwy+GhVWvNvb0PF4FMMfthz+oai6Q0H18AKvufpu/pxWGl1THeIHTuBLXj+Y3bd/cLtcOJ8YiXnfkcczMzCjok7ceRsRcxxNOaGuPA+xWzyMM2jya3B5Wp8NupY8Pj3NbQPZaGpdmt4lGZSxxGwkK2sMTaH0z7u36rOtsb6QvkuxuUolTayo+UCwTwozeIY1vtvvAfgjxD461EwaNj//AI8TgMjJkNRwg+57mr4FlSw4Mmef2+mjz/kcHBp5ZJ7+o+5fqv6deB9F8AaOcPTy7IypTuyMuVoD5D7cfhaOwH7rsUpTjV8af3fPuf8AIZvkcnlfqI9R/wC/bd5WVxwFr5MqnHi0100l2LPKomdtusfasXDmvzKxER9JIJXUsT0nEK8jzZsLHl+U4hiHN2kKO40lpE+Ta3dyfhV2vqNrK03KrkyOJ3A810JWpkt5W2urWIjSnJN1Fm/uqZybmdLoorZE/FdOVG9tpUq1mW+5N7nW0DgfK17fmW3T1qGtd6ZTK5x+VCtZ3tsb3GoV8rIJa5zK5crPc7SrXXUqsmQI6JdfHQqXpZFPJR8/dIJfgtq1mO4W+MR0OkLgbcDuHVSiEVN7jtHa1bWO2Jl0/wBLtPdqfjPT8d43MbL5r/lrBf8AoF1PjsX6nIrDl/K5/wBLi3n79f3fpcdF7N8+EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQfHODRyoXvFI3LMRMtXquqx4rSC5od3F9FyeXz/HqOm7x+JOSduJ1jVS97n8yPbyOeF5vl8itZ8vcw9DxuNqNeoc3k6jLK8XYJ/RaFc83nyt03/0Yr1ClIx8waTxZ6DlQ1N9aW7im0csUTGlxokcUR1Uv0K+5Iy2nqEeRZcNrxE2uK/dW2x/UdQVmNbmNqkU7jC87d5YTZPcLGLc1nfad6xFoUszU9oa552Vw4f7BJy9w2MPDtedV7c/q+uyHd5bnMZVU08lQvlm07h3OL8bSkR5dy5jMz5HXXF/Kpm34dilIq1WQ90gonlZrWU5vEPuLE1rg40Xe63cWKK9tXJk8uoSSxscObJPQLarOmjlp5RqXLargZGFmDIja57SfSf8ALzyF0seWL18Zci3FmmTzq6LAm3Y7SbDlzskas6eOemcsrjYbQJ6KOpWTaEMko2kk8/Czv8sTKTSMPI1nV8XSsKSBmRlSCOMzyCNln3ceijSLXtFYUZ8tMOOclvUfjuXqmhf4ePEOVrTG65qWNjaaxodJLjne95oWxoPSjY3H2ul0KfGX3u89PNZ/8U4K4/8AtVmbfif/AJl+h9E0vS/D+lM07R8KHDx2C9jGhu41Rca6k1yVveUUr406eOy5cnJyfqZZ3KHLySXVY4WjkyTMtnHjiIUHyFxsmq+VVE7ntseMRCFzwR8rPSWpQOcQOKvuo7S0hkfXKjM6WRCB8gJ6qucicVQyuqyCRSqtb7WRCpLJXNfNArWtbS6I+lWaZxBAta9rzPpdWsKnmgk+7uqhj97TtH01+VkjzPKDhZ/ssWvudL6Yv2+TW5uVtmjj5IJ7qNp7iGzjp+2ZV8mYvitwIN0VmUqV1KmXCyLoDqrIqmq5DH5XrD9rRXwSsxWZT8op0qywsYW1uA78qcRr0ecywbIC+hXCnFetwTLB1l24c+pXY4/Ku0vWf8OmmPdnajqsreIoxCw/+zjZ/YD9V6L4bFu1sn9Hl/8AEOf9lMcffb2pegeVEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBBHNMyJpL3AUL5Kpy56447SrSbT05jVvEDBGfJDr72vO8jnTaNuxx+BO/3OQ1LVjku/+Xj47lcjLyov6l2cXH8PpqZpn7dwvnqK6rUtM1ruPbarETOlDGfI5+7aCHHklUcfzvO9NjLFaxpI6drWlsTdjru/n2W9WK1ifDqVGpmf3NdmSvkjJe889WqnLNrV7lsY4iJ6hhDIx2KyV26gas9B91OmppElqz5zWGi1HW2Y7pY8ZzX2fxdh9lVOTxmYq7HG+Mm8RbL1/JxPiPX5oY3yhzS7/M7oFHFSc1/GHXn9Pj4966hy8HiKV7miaTdK/s3nb91s5fjrRuY9KcXymPJPjrTaYcgyZdrnAEtJafcrVpj71LdnN+3cM/LonaDx15W3SlYjSi15lixnq6nqrOmItPtI6iDySQm5RntWyHbmlrvVXxwrYn7UWjtBFbb2uoV0UvKJ9o60xkma08m+FCZiDtc0Xwx4n8R482ToWiZudBC/bJJEy2tdV1fvXb7KVcOTJHlWNtXPzePx5iuS8RMvafpZ9A8XI0rF1jxscpk73b//ABrTs2srhsh6h180D0oe66PH+OpFYvln+jy3yX+JbRecfF1//L/h73jnF07FiwseIRwQsDI2g/haBQHK3rciK18NdPKTS+W03me5a7NyN59PQrmZcnl1DcxY9e2rfKCacTfta1d99tuK69IJ5QLI6j2SbRCda7ReZYBdX5KXlv2z4o5JAB/ssWtpKsK8kzXAtvoqZvE9LorrtXleLsOKrtb8JxE/atNLTTyFRey2tVR84aHBooqny1vS2K7U3ZbeRwTRsKqLx9rf05U35AcwvaQKH6LETEx0t8NTqVDIIe4zRubuDeCTazWsb2ujcR4yoicSTG2l9X14WaREyutXxqryytLmsDyRZv8A4VkRtmI12qySXIW+oX1Hws+046jaF8o8zYL7UbUo0a2hml622uVKJ0aVmA73OJPJ/RW1jpGZZxjc8AO4BJApX1jfSm1tdv0v9I9JOk+CMNsjNs2TeRID1G7oP0pev4GH9LBEfnt4P5XP+tybTHqOv7OuW65wgICAgICAgICAgICAgICAgICAgICAgICD44gCyaCxa0VjcmttbqOrQ40TnNc0kfK5nI+QisT4NzDxLXntwmta47Klfvc5vwCei8xyuZ+raYvL0XG4cY6xpzc2bJO9ztx47ey5GPPfPMzMulOKMeoQMcXPax7m1yevP3V1a7mKSTPU2hkZdsJp49PJvqtitZ8db9K9bt6anIySyTeZCXE2Gts/mtfc1t5TLbinlGohHHkSzB5a0tPXdfVXUvNtsWxxXUK+XqGJixh0rg+U9Gt6/mozMRG7e2zg4mXPOq9R+XLa5rUk4LTJ5UXaNp4P3VGS8z/KHpOH8fjw9xG5/LmM3P8A/YuBP5Kjcy6Xhpps54yGuiZte6jQ/wD2tnBE1tEw1OREWr243X8TNixnDGaXTCywiQtO0CzQ6f7r1HGvTJ3Lw/NxZMEz4f0dB4RznZeFDJNJUrGbHtPY/wDbXP5fHrjvOnd4XKnLiid/6unhDjHuBF9geq14iPpv+U69I5XN3WTZWdQx5SifLd7TRrlZ8WJlXe6hRJNLPpGZ+1GeYUadxdFQtO2O4dj9K/p54h8Xa1puUNIyJNCOU0ZOU4hjNg5cBf4ulcA+3C2+Nxb5rROv2uT8l8rh4mO1Zt+/XUfb9g6Domi+G9PODo2nY2Bjby8xws2guPUn3K7U1ph6iNPnGbkZuVfzyWmZZ52WdvodVfC1M2eZ9Snhw99tTkZRdzv/ADWjbJNvct2mPStLPYq/zWN/hZFVLIeCSbpV5O52up6VpXO3A7qo8mu3sq569rIiJ9Iy+zQNJ5RM9MxHSN7wBfdRtaISiFSacD8+61bZIX1pKtLkkX6u3buoTln8rIopSZYf1BbXS1rzk8l8Y9Kr59xsOAHX7rETuVsU17anNyi55jDhuHcKvcTLarj1G0TJNuMWuk69RdkKVK6jTNtzb0pCTyYS0O6mgb5VlY6Wz3O1YPIZW54u746rOtMzG5UppSHAbiT3s1Ssr0yibLYaCSG8GyEJnbHIe0zEh18KyIhHfTBr/wCZ6jYIKspHSNp1KPzf5hHv29lbWqub9uk+nWgS+IPE2LgtafKvdM4f0Rjlx/0+5XQ4WCcuWIc75DlRx8M3+/p+pY2NjjbGxoa1oAaB2AXrngpnfbJAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEEWRPHAzc9wHstfPyKYo3KdMdrzqHPeItbZBigtf6ncbR1AXD53O1Te3T4nDm1+4cDn6nO+Qjkg89V5TLz7zfxiOnpsfFrFdy1z5DI8g2b6qu0fqW8fqfa3+GNoZnNdG7ynMDh/TdWtjwia/wDbYrMxP7lGXJlYwRPLXGyRxVfmseVqViLdrox1tO4Vy+2mV8u53QN91mKz/FtP1+3SHMyscwNZvfHsPUhW3is1160nixXm/Ub20ur6s023GDmsFG3e/wBuypvk+quzxPjdfuy+3NZue71PLuvU31VE33Lt0x1rGoaHMyjINxNkdr6pFZlb5eLUziWWQANcCeAFs1prpGcvSXFxKqVz3tduG0H9/wAldWP5NTLffT5qmAzIx3u9TXNNja4rdw5ppZyOTx65I1Ln/CrP4fLmgbGWgu3ck2f1W9ypi9Ys1eHh/R3XTr2veIgAa91yopG3Ti8oZiW0WkD3V0dQjvcoXSNjj9gVi19kQaViajrmpxaXo+LLmZs5Iihjq3EAk9TXQFQrjtktFax7V5s2PDScmSdRD9FfTX6BadpmTp+teIc52fKId02nS4rPJDnMosduu9pJ5FcgHhdvD8dXHq953/J4f5D/ABJfLFsWGuu/e537/wDL2bAgwNI07H07Agjx8bHjEcMbG01jR0ACvtnpSIpV5236ma83vO5n2pZmYdxF/YWuflzzMtvFg6a2bIcSb/Vas2mfbarSFGWavt1VczEL4rtF53HVSi3RpA+Tm/dQtdOIV5JKNBx47Kq9/wALIqhkeWNabsnqozPjqftKI2rT5Acyz1aVVkyRau1laanSjkTAOBPI/sta1obFKyqyT0ar09yCob7WxRRlmDXk9/a7u1VrS+K7hTdlPBeXWCe1cBSiZ+1/hE+msyHulkLt4DWnoOhUdbbMfthE5/ls5LXBrb3e5V0V1GkfcqzZS425xsD8lmKpTOoV5ppNrWi3H4VkMTr2gP8AM3FpaQ49vb2Uvc9MdxHbF1b6aenT2+yzPtH6ROdUjg0myRQ/urIiPpjfaOd7WRNI9QaT0V1IVXnSDCc6eZpYL3mgB1KvpTc9KbW13L9RfSTwzH4d8PMMzG/x+UA+d3dvsz8v7r1nD40YMcRPufbxPyXMnk5ev4Y9O1W25wgICAgICAgICAgICAgICAgICAgICAgIK2dlNgjJs38C1ocrl/pxqq7Fim8uY13Pc1m5ro93UhxJP244C4efJaY8vv8An7dbi4Y3qXG6hmvyXmQsY2+zTxa4efNOT1Ht28OKKRqZaufOJDNjQd3HPC1Lcj1FI22q4Pe5a7IzAA2Ki2vxFv8AZPKNeGtflbXF/mVZZhJukogsrcOgP2Vkfv7/AAnFdar+VbNlsMLGksLCRzyrLx6nXSeOvvvtrHaq9jKcbI4F9AoY81nRx/HfqTueoch4z8UPw8cvdI6x0ofsKU8VL57+MOlNMXEx+UQ4zC8cOmm8hzHR7zw5zuT91s5/jL0ruJ2jx/ksWadT1LZ5GY+Zpc5xvvRBAXOrSYnTpRkj6YNcHxAWTXSls1x69qr5PtJuIf6qDQPZX1ptRN5C/fxH0+PdT1r2hM/b7IQxl2TazWJlC/ai+KMTeYxga7uQr48vHUqtREpnzEAeruoePZuFfIymgEX8LHkNl4O8L+IfGupvwPD+J/EyRMD5SXhjY23Vkk/t1U8OC+a2qw1ObzsPDpF8s6h+lfpP9F9A8Madh6j4hxIc/X45ROJS8lkDx0ayiA4Ai7IvldnDxsWCsWv3aHh/kvnc/KvamGdUnr/X/V6bmZzQKDqVXI5W57lycXHlqcrLsGifgLn2zeTeph0oSzbuXOulX5b9tiK66hVlnJPf7qHntOKaQSSc+w+Em0JxCvPMIyR14tRveKs1pMq7sjdTuD9lTN96lZFNdMWyAi+LPssReNMzEoZn3ySav34VVr79p1hUndVHn7BVz1CyqjkvvkOok+yrtO2xjj+TX5E5aS1poUe9qvbZrT7lRnmDgBz+KuCsxG11azDV5k7y99n0iwLHVZmstikREKcMz45S27DW2L9ys1jSdtTBPNua0AEkficrtbVdxKs5zjFtugbrnqkQz0x8xz+bLQ3ir9/lTiJYnphGfNa91FgbVD4WYjbEzpE+Zm1wNgVf3U4rM9oTOkHnbgD37q2Ko7fcgB2BQ49Vfkr8cdKr27dl9HPD38ZqjNTyI7xsZ1x2OHv7fou78XxPO36lvUOD8vzPCv6dfcv0dpTyWC137PKS2igwICAgICAgICAgICAgICAgICAgICAgIIcmdkTCXOoBaXK5MUiYWY8c2npz2bmOneXQRO2t6yno37Lg2zedt1j+rqY8MUjVp/o43Wcjyi4uN7uouvzXJ5eX9OszP9na4+Py1ENHJkxytc1lew7LnVzVzxMVb36c45iZazLkc2LfEAdt3YVcVmKRNY9Niuptq32oTubNCDbQ7rXcqya+cRv2tr+yZ/DX6pMWsja6X0M49iVLLWeoj6bPFxTkmfGO5aXO1cwxlgdTfvyfum/Gupl28Hx9InymNy5vM1bzHlpfde3ZQteZjUOlXDEduc15rc7HMTn2OoJ/pWxxLzjv5NLmUi9ZrLhtSw48SLb5kocGkh5oEAda/wC9l6vHfz708JnpOC2t/wBW+8J5n8bA1rLEcVbiRdj5K5HL4vhfcvT8PmRlxRMOrYzdbw0Cz0vstTxn23vOIYTMjDy8CndCQrce9aRmUVhpOw8qyazPtjyfBK2RlE8rE112xZFMAARuFg+/VT8tK1Jz279sbSXPdwBySenCrmZljevbd+G/p54z8Ua07StO0XKjkY0OldksMMcIPdxd0+3Uq7DxsmS3jWGjyfk+Nxsfne8a+td7fsvwJ4R0TwRoUeBpeLCyVzGfxWQ1lOnkDQC8+3c10Fn3XbmcfHp40/rL5xy+Zm52TyvPX1H4XM/NNkB1cdAuXm5G51ErMOBqpsgusl/7rTtff23q49fSjPPZ4JPwqZuvrRXfMKPP6JN40l4oDJuI6gHpajFkpjTF8npPPTopzdHSnkSlx7V7qi+TylbWuoUyQxxoAE8n57KmOlnt9ErhbSACf2Ty11J4sTJZIsE0o72zrSrkybSwg116dysWtO4W0ruGrzph0LqoXx1VU7bWKrV5GSNzQ1riT1+fZZ69NulOu2tny3CUEAbr7/3UoiYWxWFfKk3Da0eg2bPZZmJ1pKsqrZSA11H1OJJ9/j9lKI6Yt1OpRTzVKRZa6uhPdWepR9qz53PkaADtaOWjhZj0wy/iC8EscQ3dXxSlDEsmZTXeg+lpHAAulKNekJ3HarKwOsO5+LU4jXTE27YHhgb3J6e6srEq5lvPDWjyavIzGa4iMu3SP/yt/wByupweJPIvr6c/ncqOPTyn29z8K6bDh4sOLjRhkcYpoC9dSlcdYrX1DxebJbLabW9y77TYtkYUbSoXlEEBAQEBAQEBAQEBAQEBAQEBAQEBAQYSv2N4FuPQLXz5fCNR7lKtdtTqLImM/ic+Tc1p4YOB/wArh8jHWv8A3M07/l/77b2C1pnwxR/VoNX1YSRufAx5gBA2jgcdOFoZuVF48qRPi6ODi+E6tPbiNXzvMyX7mhxdxS4PJ5HleYmN7d3Bh1WNS02S4RW2JpDjbq7rWjHGP9tYbdZ8+7NZqOSJI5GCT1ggizyCr7zFqzG+1mLHNbROumtzdR2RseGFjw2r3WVZWdxvWnT4/wAfN53eenMavqsj3l5PqJI3OPKTft3cHHrjr41jUOYzMx73klxojnlV6mzc6rCi6c7idwdfNEK7wjSqbyqTyBzyNwp3HurscePbVy9tN4pw8rN06sU+W8AE+9D4+y7XCzVx2/c838pw7Zq6rOpUfp/DPjMmY5zwZHXZFH7UtvnzW0RMNP4fFfFWYu7zGDY20XO491x7zuXeqyc+wBwB7qMV0ntC51XR5+6siUe9q0ku02B36BYmetMtp4K8N6j4x8UYmh6c14kmf/Mk27mwxD8T3fb+9LODHbNeKQ0+by6cTDbLf1H+8/h+lvDv0A8D6ZkYmRntyNUkgh2SMmdtimfZPmOaDwaNVdcWuxXh4aTEz3r/AHeGz/4k5eSsxT9u/wC8R+HpWTlsxYRDCA0MAaNxJ4HH3PCr5HNmP2uTjwTknylp8zUHEuAeSVycnImZ9uli48RDWTZJPU9eVrTafttxjhXkmvv9li0pxVXlf1pxH+6jaUoRF4rkrETGjSB8wJIb0HysecfTMV/KN09GyefZY8/uWfFXfICD14q6Cr3tOI0q5MnqDTbhV+1KNphZWv2r+cGgA9Cq5ss8fw+Okf6XA0DfU9k3PtmKwpzzCr3uoWG89b68JMrq0auacubfpaQOR8LMeumzWsR7a/JlNEh3qaTYPUj4UohdER9tVPkN8zzCb2nkAcH4WYmFnjPpBNM534yRu6Ae6T6I99McyfzaZCdkQIA/7+SthVP81GSSSbKBptu5PKfxWZj9sM2hzXW+hfFdaU4/LEztk/h72tFENulKIQ2hMgc9jI20T+33VkV2jM9PjJGve5xJDeinqJ9IbmPZG0zuDWAkn0trqVdjpNp8Y+1V7xXuXr3gDRjgYLGObcr/AFPPz7L2fB43/T4or9vH/I8r9fJuPUPVvD+FTWuIWzaXLmXSxNDWhVos0BAQEBAQEBAQEBAQEBAQEBAQEBAQEnoQTPaxpleaaFz8l/eSVlazM+MOd1iT+Nb5z2uELWnaP832XF5U/r/ut6dTjR+l+2PbkdXmGPF5UUPlMcDYc63H5XEyzOKPGtdR/u7OGPOd2ncuRzCzzt4ftce1crj2x18/LenXpM+OtNZnZb2uawOcQDwfYK7VvKKx22cOD9TcxDmtZ1VkUz3PIDj/AJutK60RWd29u9xODWlXK6nq0kjr81ztvI56FQm82dSlK1hpsjILgXOd1s8KdabLXiGufM5/DgQD1BWxXHpXa6OME2C0hx/RWxVTayaLH38kWR0CnWNKbXWJIwYduyiTx3pXVn8Na/ati4rITbG7X9CtmbbU+He1pjjyT2Vek/TETN7iuEtGmYlUkym2SCVXafoncOz8BfS3xj40DMrCwxh6eXV/G5TtjD/9R+J35BW4uPfJG49flyud8vxuH+287t+I9/8A0/UX008J6X4B8Mx6fAYcnOfbsvLEe10zif1DRwAPj5W/jy4+Lj8a+/uXiOfys3yObzt1X6j8f/bbZuqOc4lpAB6crRy8y1p2xi4kRHbT5eY9zuXWT1taGTLaZdDHhiIUZsk3xddFTbJpfFIROnHvZWYyQeKtNJ3B6fKrtKcQiM4ugVH9Tvo8UD5SCQ42Csef0zEIt9OLr69gkTpn3GkUkwDuoB68rE27Tim0DsinfJHusRbtP9PapkTucfwtFCjz0Kjadra00ryytaASSb7hYlOtdvmRMWtBLgG179VmYZpWJnSlPPGW05xdXNblmYiVta2hqJpgXOjDi2+L91KsR6bMR9oXBvkbjueWHmzVfPyp1jrbMz3pqJJHxitoZ6qHVNM7Vnvp/ntPQUOO57hI67Zn1pGyS4r6js7/AHU6+tq5liJGtcWV6+tXwB/upRolm57XObIRW00OVOI32hLEucHW9xLn8HngKcaR3+HwOFihd/upVli0dPjnNDzE38TuthX1rKm1nb+BdAPntzZ2c9ImnsPdel+N4PhH6l47ec+T53l/26T/AKvYfDOmn0ktXZmXn7W27zCgEUYACrmVa0sAgICAgICAgICAgICAgICAgICAgICDCZwYwk9FTnvFabSrG5ajUJHZUseLEeHm3O7ADuuLkvOe0Uj7buKv6dZvZq/FrvLxsfyNp2Agc9h8LX+SrPhWcf02eB3a3l9uF1vYYHSiQb6t3v8AsvPcqsTWZie3f48z5RDlNUzRFC52+hfTutKsWt1DtcXjTlvpx+q6nK+Nxa5zW9Lv9lOZ8K6q9Pg41McahwPifMlbjOkaXucOl9VdxaRe/wC5ZnvNa6q0Om6jJlQkhzzRr1dVu5+NXHKjDnnJXctqzbtDtoc4jndyFrRHaVrIm7CRu4+eysrEozZLGB5jQGenqSfZW66QmVgbBRAorMRKu0j3AvLeK60r6x1tV37Rv9Lrb/V1tTmNo+W0L37HECyCozZnW2Wjafm67rmPpOntY/KyXbYw5waLruSo1i15isKs2WmCk5L+ofpX6LfSDTfDJbrWvPh1DVCHNZG0B8EYI5FEep3UX09l0uPhri/fbuXi/l/mcnJ/7WHqv5+//wDHqWXmiNojYGsY0U1reAAqM/JmZcfFx99y0+XmW4tHWlzb5dzp0ceGI7a2efiute61r31GmzFVOWax+L/la8339rIjSu+dxNWo+cpeMInT0AN1m1mLzEaZiu5Q+dZd8e5UYne2Zj0rGf8Am8Hj+yxv93Sfj0xmldY9XJ7KUzLEVhG+bod1c9Qs70lFFaaQggBwICjMLKwjmyABQ9q+yzP4hOtFOeR22rDQOTzdpaJXViEBnZRFeq+eOQU0l4TKvLmjYGH5oN6JHftOMep3DXZWY1zAWnnoaHRS6XRXSm542WwinA3z/dSisRDPcqpnlbE9zqr+kDqBSltnUKoe/Kf6S4+4PssxG0d6V855ZPFjV0aXAV1vr+ynHUdoz2xd/Tbr29GDqD2Uo9IfaN4axx3OLnEkk9FKI6Z32+wAv3bg48WL7KcVlG1oMqRu4sHpoCyFLxQizHENuPPUe6uiqF7/AJdN4M0V2dk/xc7D5YPpB6H/AIXd+M4XnP6l/X04XyXN8I/TpPcvZPDOjk7fQvRTOnmbW29F0rBbDGOFXMqdtoBQWAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQQ5ZAjBPS1p8z+CP8AVZj9tFreRJE0NxwGvfQ3dSB2C4nJyTT+B0ONji3dmvzDH/CtblSeZK1tBregS1t0iLz2tpE+f7Y6chr2ThRabOCdjGgnlq5uatL0msO1w8WTJliIeT6nmTZk/wDLadhIDW1S5lv2R41e/wCNgpgppyupSOe5zQ6ufdaepmXSiYiNtHqLBJHsNEdLV+PdZ21ck7aQ4gxpWmKPl3ueAt79WckTEyqiIhcj6Et6FKwhaWfoaLcfnlXVpMq5tMQxDnXwfT2C2IiFXklMnQf1dlnwiUd67PPaW2b9hSx6YV5sg3VcdlGbwl4qr5nlxu/y7rXjRL9X/Qb6Yad4axMTxVLkHJzc3Bjc3c2hCXC3BoI7iuTyKPuu3xsFcNYyfcw8F818tfkWtx4jURP93pOdK1oLjIQVrcjLE97czFT600GVkA+reHD3XKvaPe3QpXXWmrllPmbrH5ladr97bUR1pTyMnYdrnVuNWOVTN/ysrXarLNzfH6qqbalZEIpJvd1c8Ad1nylmKoTLR5d+ilCXijdLxRJPW64WYlnxRFwFu49wpaiGe0bpQ8FpBHyVj37Z8dK5yC1+wNO0C7rhPJZ4bhBkyEkvkebBuulJMb7lZWNRqEM+QZYxtJsCyVLuUq08Z7UcmR/NOLr5A4NrOpX10qHIoFx9Lj1P+6ztPx+lWd7W0G8kAcV3/wBUisQzEyjlmc51M2f+1Vx7qepmeiZ/KnKdsIdZ5FBrT+XRIidMzMIXvkYNkrQXUDZ/ZT1qdI7ifSPHmdG988jDsaCCGkA83wraddq7/hr3SvkldK5oc/mueFj+KSI0yhEZfxJRu77ke6zEMzLMMLiOgsbqLuatTrXU7VzLIOIjc+rc7ge4A6BWxG+0J1HTXlz/ADAN/qu+FZWkyja0Oo8NaDNqLmmRrmxEi6HX4C6/C4E5pi1vTkc7nxhjxr7eyeFdADGRsbGGtaAAAOgXpaxFI1Dy2TJN53L0nR9OZAxvp5pYmVEztuWtDRQUWH1AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQQZ7C/GdQst5r3WrzKzbFOvpZinVmoy4QWNe0CwK+wXItjiYiYbdMk71LndTieJGvslvcEcdVo5KWifJ0MV4mNPOPFUuVr+rnS8Om42P/wDM8fhLu/6Ki/ld7D4zHThYf1sn8VvTiPEOTHpviQ4mIGSjCxS6YkWN7xtHXrV2ubO62m2vX/l3sEzm4/lfrynr/SO3DZuQ4uIulq0p9y38mSI6VHz7IzYtXRRR5bnSo6SOUl7SXX+itrSaoTPTAlzRua3i6Pta3MdYmNqMltdMXNtlPHqK2IjXpVNmTXANNdlnW0ZlC6UN3AO5ri1mbaJnaN01jk1S17WnaUSryy8muigTZ6n/AIbPAR8Y+KBq+a0N0nTHNlcHMtuQ++GAkURxz+Xut3h8Xzvu3qHB+b+UjjYfGn8Vv9v5/wDD9a6pMWMIbQAHbilucvLPbxHHpv25rMyzyOCuJlvp1KUajInJNe59+FoXyTLbrChLMHnng9uVq3v5Lq10pZM3a7Huq5n6W1qpSTEE82FHa2KwF+1t2eeitiNQx7V5Z3drq+UmZTisI5ZAW07nsbWdbSrCLz2gEbiFJLw2gyMpu0lpsgdPdZmYlKuOdqks5tzywt6AAd1mI2tisR0jM9N9XJvhZ0n469K5fI0my5tCi4dz8LPjr0l0qzSuIDyBZNH7rKWkE8oLXNJJcasAcUPYKUQypFz3R7ZLNkmieE7+2dwifIdgBd5bXctHPI9/2UohiZZPnY7cWn0mgK6BSj+SM7j2rSuc6QPIsg0Pn7KcflhXy3tdcA20w7i0dCe5/wBFLfWoQne9qe9zHGO207g1/qeyzWGZY+YQ4Sk3I47bFbQB0CnPbH8mUTD5gaRvJ5NH4/srKx1pGZ12su9UZaRRIoV7K6tdzqFEzpv/AAn4adkzNnnitp/C2uq7nA+O/wA+SP6OHz/kdfsxz/V7H4U8O0GXHQHQUu9ERWNQ87fJMvSdI0xkDB6eViZUTO23a0NFBRYfUBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQDyFiY2NPqMRa4xm3NJvk9vhcbPhmszX6beO325rxPL/Km8tw2tZ6fv0H7lat6/q5IpDo8Ku7ViXCeN9b0Pwt4cLMGSHJnewume13D3g0RY+QVP5TJgwYoxYu5l6j47jcnnZ/LLExEev9HhOmapNlaVnarkSbsnUMt3qI/paAOPzLlxcmLw49Y+5l6vLqM8Y6+qR/8tPkS7Xsk3US7aBX91q0x7L5NqL8nH1DUBiwh7MaEXkyA309vueAtmMXjHlKqck1jr2hyclold5LBFGT6WA/hHsoxXy9rYiYjv2+w5X8oMJtbNK6hr3mNvs2RcfpBJCurVTNkYlDSd73UeQBzzXRZv6VxbtWyJ3Fw2jn2VErYn8oXzU1wJDSFGa7Yi0L3gjCh17xno2lZAyHwZmXHDL/AA7dz9hcLLR70rsWLdorLX5WeceG96/UTPb+g+madp+g6Nj6ZpeLHjYWLGI4YoxQa0f96912skRjjUPmFsl895vee5anU53OaR2K4ue8y6GGsQ5fUpiA8078lxOTeY26eGrVyzv3cuIC1P1JX+MKOW/1W2qCqt73C+kdaU3SuN2TfYBY3Mwt8UEjyKN8qUR2lEbYPyLbYHq+FPsiqq+YNHqk56dKWYjpZFZ+oVRll2+3Hkdb6KUdrZx60FwMTXknn36KXhBEzvT4KcLbexpBJHVZ8I+mdyrTyloLGtNEXbj/AHWfXScREztUPBadwN/haOb/AFTx/CzyRyvppLbaDzyeilEMf6qT5RMLoV7df3WZ1ZLekWQ8tcKeHWPTRoAe33U9MbVJnPmk2RSGwOfVfHU/kkVmSbRCKdhfFsMjyeaPypREseWmAmDQRJ6eAGiuLtZiOme0cszWSGRp4NtafZ1dVLWpRnuNKTwLZ2cTQo+yzFfwxtHJxPtaWhvIFe/upkdQya0xii1zA0D1EWTXsrK12hayxgxyPcHuFvPt1K2aYpmdR7a+TJEQ7Twr4cfO5kk8duuwCOi9Fwvj4pq147eb53yM3maUnp674V8N0GlzF1vTiXu9E0vTo8dg9I4UZlVM7bNoAFBYYfUBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBBXzscTxVQ3DoVr8jD+pXr2sx38Zed/VEDS/AuqZovzmMG0k1RLguNkrGKlr/AG9D8J/3udjp9Py14s112R4Ow4XSN83a7cB1onqVxbT50pH2+pUwxjz3mPTRzubB4T0yPzQ0uhL3D/7OJ/tS2OVTukfiGpS+8mS/8/8A46aGT/yGW/GwcVpflZv/AMIJqmc24+woE37BXYeJuYaefkxWJluZ4IdK09unYkokY075ZT1mkrl/wPYdh+a0+RkjJf8Ab6hbxcc687+2nypaJJ4CzSq+1lIZoY4mr+Vt1p00sl1mLIdI1tGuO3RSjpTM7hlLKdoaTdlRt2xXpBLMGu2jgqrx+0/LXSpkZAt2/pSlFJ+kbZIiH6a/wO6XjS6RrWvlsckv8U3HYSbLNrd3QigfV1BuiQV0eNXwnbyPz/Im3jSJ/L9HahOQDQ4pZz5JntwMNHM6pJTndlxeRPbqYoc7mTG+lFcfLadt+kRENXkTEH1V+Xdak2bNatZkZD9wN0KVflqWzWkKb5h5dhxPHUnkqfuNpxHeld+S57RyC4i+qnEzKfhESjEw5AcABzyOintnx7VJ5/M9DQL7G+P/ANLPtbFdItway7a/iibUku9sP4kscA/cdwsfAT/Vma79PrcqqFEhwJv4U4mWJqryyM8rZt9IPUf6LKUflXEkhdYJIHAs/wDeyR3LM6iFeeQSek0WfeuilPYgpgG4saCG3dnkLNawTaVVz3TAvLQAeOvf9fhTiJljekDvLjhNtdQoAker9Fn32z3t8jkeGuLra6vTZ4aPlSiGJVxukk8iMuL6s2LAHcn4U667liZ1D64tklcGxlrI27YwT2Hc/PdYnSO5hSla0S7pCSN3UHivj4Uqm9+n2y0hwBf/AJW9Cb6KzUaQ22GLgyZE27b6nO4YOgW3x8Fr21EdtbPnrSu5nqHfeE/C7nPa97LceenRen4nCrhjc9y8vzefbNOo9PXfC/hlsbWlzP2W96cq13d4OFHAwANCxtUugUsAgICAgICAgICAgICAgICAgICAgICAgICAgICAg5n6j6G7XPCWpYMIBlmhPlg9N45b+4AXN+R436uK2vt0/ieZ/wBLyqZJ9RP+32/B/iSJ8WK7HlDmOjJbtdwbv/deSw+VbRt9ppaLzMw1Gp5Lv4WHHc+o4Yg3p2HddCm75O3Mv+yk2/Lo9DYNOwZsrIF6tnxAOaTzi49DbF8EgAu+KHutvl5v06fpx7n3/KPw5XHxTmyec/wx6/nP5aHUNRe/JLMdoc4cOe8elv8Ayufiwft3LpXy6nxhS1HIZ5bWNrc38Tj1cVbTH2pyZGlmfTjuNX0AWzENK+Tvtbwshwoh1f8AqSsWr+SuTfps3ysbGKHKq8ZSm8RCrlPdt3Gga5WIr2ja7RajlOja8HoAtvFii0tHkcjwiX7a/wAI2j53h/6TYUOosycfJzZX5boZnNPltfRZVdAW0aPPKzOWJvMVl5Tmz523L1rLc8dXAnvSpyTP2ox6aLUXGiTfTpS5+eeu27jj8Oazn8u5pcPNO5dHHDSZMhdu788LVn8N2kNXlOeQbcL9uqrmstiuleQ0wA2KP3V8ViI7Sj8q0zgGl20Weg/73VvjHtKJ+kW+M2XvcD+E8KcRGme2E+2Eg+Y0ihRabBBWdaZid/SDIyC1rmgjrwSPUpTKdY+2L3k/zdwDm0SL5+yxr7Z/kpvyn24ij2vtV+yzEztLUMfNLxusFw9NjonsiNMHkeWSQ4mrIab7/ClEMTbtr5C4gW63O6i7P2PZZ10zthnTPczgkG9t33r3U+5YiFcnbs2uArncTdrMTP0y+vmLnX+JrOeRVn2v9VLSMwq5c+9o62XVQ7cqWtz0zHT4wnHhkIeBM8+sc1Q6NUpQn9zEv9DnU4uqqpIhi2kDHbw0bXOf0AHAH/CtrTcoTaYbjRdKmyZWNbucR1Pt+a6PG4ds09NDlc2mKJmXqHhHwnZafLs+9L0nH4tMMdPMcrmWzT29b8OeHY8djSWAV8LZc+1nW4+OyJoACwrTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgHokxv2Py9/ia+mGZBqA8R6FhvnxMiYyZLI2l3kvqyaH9Jon4NrzPyXE/Rt+pSP2z/s+kf4Y+brkxTx806tEdfzj/AJh+ff8Ax+V55yp4XWHF7GObYAB4JH7/AJBaOHlUpO4ehzYZtHg1uXqMj8h0McxLiSZJLv789z8rYph8o87NTJmjH+yv0gzNQxYIWudJGxtd+BatphvadaamTl48cbtLR5GsmW/4LGkmvjeRTf1K268eK/xzpzMnyNsnWKsz/P6Vooc3ImD8iUAXexnAWZvSI1WEKY817byT/SG+woWwtDmst1dVqz26FY8Y6Xqock/H3UdJTKhn7qLu3flKQqyTOmPgDSMHxN4+wNH1DMZjY7yZHWQPNLeRGL7u6fqtq3ljwzavtx82StskVmX9A/C0rZNOgNBjg0WB/Zc3H3WJcnkdWltMl57vpZyT/NTRqdQfyTZIPUFaeaW3jcvqLrc4h1fJC42Wdzt0sUdNJJKKd7X9lRHctyI9NZIdzjbqAN2BxSRSGxE6hWkyA70VQJuwro1PTPjrtTmm6eYeaoff/RZ1+U6x+FeVzjNbSQ49jfRWeKUdI8l+xlFti+hd0/Tqk6SiWDHR7bfd9j7LEMztg54qndzZ5Utbgme0Uk0ZcYy8M28Hni/a1nrbPbFj2ueGinOAHFcmulLMRuWJlWlySHu2u2UBR72sxvZMIcjKY4Oc0U1x4YewUpsxFVaJoNOc9obV0T0HdTrHW2Z/CIODZgWML/v0CR0zPbDJc0PLBbW3Zbf9lPXaMTKFjQ2Y+c+yfwcqWp3pG1uunyN1u6ndd2eyz49ozbpi97nktiaaPcHn55V1KzKq1te3QeHPD82XM17muo965K7PD+Nmf3X6cjmfJRWPGncvXfB3hINDP5VD7LvUx1pGoedzZrXncy9U0PRYsaNvoH6KxqTbbfxxtYKAWEWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg+OAIo8goPAv8SXgLRnYw1TB8vEzMx581h9Mcm1o6V0Peu68t8xxcWHLTJXqbT/AE6/8ve/4Y+Sz5a2w5O61jr89/8Ah+Qte0eaHJex8shY2wWRSMjB/WyVnjcisx/N2uZxpmdx1DWfwscDgMfTMUOIsSTS+a8frwP0WzOSbfxTLnRxK1nqIYtxst8pc8x2oTauvS2MN972vxRltbi3kdgobWzGoWYomNNk8g8crHtDUbWX0W7RXPZR9MtVqIpruort7qdFGWdQv/RXR8nO8dS6pDO6FuBGdu1oO97uNvParv8AJbPJv44YrHuXB1vP5T6h+4PAxlbpkW57KIsBpulzcFJivvpqcmYm7eZkliiOiry2V0hptQkFF3X7Lm57Rpu4o7c5qLy+2tBK5t++odDHGvbS5D6kcCTY4pRiG1EdNXkzEF200e9qS+tY621r5w5pLQAWnkHopVjcLdaVnHkivkduVZHQPeTbgTQFk38KTKIbXMcXOJaDZIHKxEMzI+cOe1kdji97qA+ArOmP5oJSDtc1lu/+v7prXpmEcj7rZG1vFfn26rOvxB2jyHOhBcOX1yOt8rPj9sbiVQEPiL3PLHVuc3d0SsJSwfMHQlwa6w228Dm+5U2NaRNfFstzRvoUewHdZiN9syifLY3tYY91knvSlFe2P5MbiZcjy5zj1APIH3VkREe1drTPpVYXytLyHB3Nd1KK77QtaI6S4mPLM4RxAu7H/ZbfG4t8s6rDWz8qmON2l2vhTwpJK9r5WlxJ7hei4vBphjfuXnuXz75eo6h7D4S8JNYGOdH+y6Gocm+R6PpemRYzAA0cIomdtm0BooIw+oCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIND488NYnizw1laPlHY6RtwygcxSD8Lh+fX3FrT53DpzMM4rf0/lLofGfIX+P5Nc1Pr3H5j7h+FvG+j6no2tZmlazhVlYry2RoH6OHuCOQe4XkKUvgvOK3uH12uTFyMVc+Kf229f+/U/lxs8GmvcC4vid83S36XtrqWjlp33DFkOJG7fHMHe3q4Vm7T7a0xWJ3DCfJgadu8E/dTrSVFrQzwyJ5GvYHuoV8V9lmeulcRudtiMdvBFuI5PKglbUI3YEuXJsETnWOQB2+U6q1cuSIjt6Z9HNKxcfTc7yopGyx5G54Y3ca2inEda6i/hQtk84242a0efT9B+C6Zp4HBNWCOihj6iWpnndm2ypiAehWnmuzjq1OTLbSSaJtc29ttylWkzpHXYocdlq2buOGgy5XGUcODgavos6ltUr01WZMGOLjGHBp9TTfP6LOmzWGqsPlkldbGHn7LNI3O1lp6iGPmiqBAde3pwpsa6VyZi920kgdbWKxKXTIENIc9m3kA0Df2Uo9o6fXzRg+VuLQ3jaAP0Vka9I9wgllcfRv9R6NPP/SpamfTHXs81zWg7dpHBJKz6gVHPlIuw5wHBArj3TtKdMGshZH5ssgLwOCW8k+32U/GIjtjymZ6QZLyY2kxGOM8gX15WdahmsdqrH07zHN6njjm/spxUmdsZHHdRIG4HgnoPlS8dK5vCEu8xtb3OocBX4sNrzqsbUZM1aRuza6LouTllrQ14Z912uP8X95P7OPyfk/rH/d6X4R8Gk7P5X7Ls48daRqIcPLnm07mXrnhvwvHAxpdGOPhWNW19uyxMSOBgAaEVbWkBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEHnX1k+l2nePsFkzJG4OsQNqDKA4c3/I+uSPY9Qubzvj68rVonVo+/wDl3/hfncnxszS0eWOfcf8AmP8A3t+RPH/098VeE9Sdjapp7iwOtsobujkHu1w6hcO2HJhnxyR29zg5/G5dPPDb+n3DlHDCZ6crCcw9OizXf5St5fSLydHcfU3vYtlqyLWhRas/cN1o+FFluDMWN5+Azr9qWImZnSnJfwjcut0zwPmTESZY/h2HkN6vr7dvzUZtr05mbn1jqvbs9E0vTdOxv4aLT8cOdwXPFuefcnus1v8AUuRmyXyTuZWRpL8DIdmaRkMhne2idgsC+nPULPjr+FX5+Uas9A8CyzyaaDkvY+XkPc1tAm+wHRR1raNpidNxmybmkjo7sVy+TaPr7bOKummypCI9zqANrm3/AC3aV7002TMSC/ih7quJ2261j01E8rZPVtPPT5WatmK66UMskRh4aCOhocK2IlOuvTWSHfbdhBJ/L7KW/pNi/cCdrGXXbm1PuRBJO6txcGnqABVJs0reaao9AeCeK+UjXuWUTrY0vMjSd1FxPI/L/VT8Y9seW50ryuymMDjGGtcPxX/T7qXjaK7k3WZ9pDMXNFhoa0W4+/tSlMIxCJkkg9d7O1E8/NJqfonU9I3yxMfT+GEbrHP/AEKcV1LG9wqvk3M3OYQO19T8j2Uq0Z3r7VJJmGURMc2PdxZJofK28PGvk6rDVzcmlI3aUuFhZWY8hjHNYT+a62D4v7yf2cnN8nPqn93a+GvB8kr2udGTddV18WGtI1WNORlz2tO7Tt6v4V8GtYGkxD9FfEaalsj0nRtDhxmCmAV8Iom228jjawUAiLNAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEFLWdOx9Sw3Y88McgPRr2gg/qqORh/Vr/NZiyTjtuJeTa/9PfB8+Q/+J0eGOW+dtsC4F/CszW3Uu3i+Q5MR1bcNJJ4A8G4210GiYgcBRLzvtVZL011Oln/Xcm292lHJhafhHZjY0UAA5EUVAD9FqWzRvUSxvJfu0qEshJDWtbFHyA4ttxKlXJNiaRX33KjkBkMgo75T3d0AVvlqf5o6mYUs+ZzWW0249x1Vm5iNkREt79K9cY7KyNGnpjzc0N8bq/EPv0P6p5T4ztG9e9w7XML3NdR9a4mfczLcxxEa/DS5Uh5Dm39ui0be+29SPw1WVLxy2rN/isKXU/S+tZ21GXI2OtxJs+kcUs1jTYisy1U8jnEtawu57O4/4VkbW9R7Vv5pAd5e5vUgEUpTE6YiYhC6aSOtvB3cNItK/wAidfavIWuA4dvuiAK5UogjpEfxFpLWNPU0VnxZ3qFaVw3O2sa7uON3Pa/9lKKm/wAmT58sm7Ilf+EAgAAcd1dMzadyrrqvUKbnMiaWNjffS3mz+ijEaWTMyhdJUgPA3Agk1YU2OvaKV7Wlxe6x/SObK2cPGvltqsNfNyKYq7tOmDcTO1B4a0OjiPYdSu7x/jqUjd+5cLkfI3v1TqHU+H/B0krml0ZJPWwulWkR1Dm3yTM7mXpvhfwPt2l0X7K2Ia1sj0vQfC8OO1pMY/RSUWu6vEw44WgBoRWtgAdEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQazWdIh1Bu4UyUDh1cH7rS5XDrn7+12LNOP/RxuqaJNjSEy4pIu7Atp/NcLNwbY53arfpyIt6lz2owMdLJIxtDtfH5LXyUrMzZdS0xEQ0eowyFwpn5+yqteZ6qsrEe5aDODccvkf1/UlX4sdp7iErWjXtyet6y6JpbBjl7x0ceAFs/pX+0Nw452oa1FqUWoQZMkM8Mgkjczja4dPupfpTMds+T3nwb4sg8T6QZgxsObE0DJgv8J/zN/wDU9vbouLzcF8U7+pbWC0WWcx1WS4g91zbOhWGmy3RjqB0u7WK1bFdtVkyMLXMI/O/9FOI+l8RPtQyCwnaHNa6+hCs0l2qSua17RHf4ed3AJ+6nEa9MW79sH5JjZwz+YDtLgb/O1ZEozCq3Y+LzZHEc9Sdov/VK16JlXc2R9VJE0G/xGlKINwrukmNtZGzaejt1cf3WawzMx7lXlmfZG1paRVO5r7fCn4TMkTCFxllcdvHFcCv1V2PBbJOqwrvnpjjdpWMTSsib0xsdRrml1+P8V95P7OTyPlPrH/d0ui+DZZnNc+Nzie5C7OPFWkarGnFy5pvO7Tt6H4c8CVtLov2V0Va9sr0TQ/CcEAaTGL+yk15yOrwtNhgaKaEQmdr7WtaKARh9QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEHwiwVgajVdNxZ2nfjROPvsC18nHx3/AIqwlGS9fUuO1XQW0QyOgtb/AKDFE+l8cm35cjqvht7y70FXRhiOoSjLty+p+EnkkiM/ooWwra5XP5nhV7b/AJf7Kr9NZGVQh0jO07Lbl4UkuPOz8L2Gj9vkfChkw1vXxtG4Trl1O4dZh+JXSx+XqUDoJenmxC4z929R+Vrhcn4aY7wz/R0cHPj1dLkZMGRtMUjHB3+V4/subfi5adWrLqYc2O38NoVJWMDdr2t69T1KhFPpseW+4Up4mEueWAOaTQ7UrP02fPpQmxWyNDgy3XfJ6qX6R+orz4c5tsdNbXZ3KnGKfR+rWO5UpcQxW9zmSk8cOsAfZSjFMdsTm316QRxSbg5jAPY3f7K3Hx8l56hXfPjpHcs49PypiA1jjfUlb2L4zLb301MnyWKvrttMPwtl5LgXMIHsF0sXxlKzu3bnZfk7T1Xp1ei+BHvLS6In8l0qYq1jURpzMnIm07tLu9D8CMZtLov2VsVa9srtdK8L48AH8scfCkpm8y6HF0+GEABoRHa41oaOAjD6gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIPjmh3VBXlxI39QFjQqzaTA/qwJpnajkeH8d4/AP0WPFnylqc3wnC8GmD9FCaJRklz+f4Mabpg/RVzjTjK0mX4LNmo/2UJonGVr5fBTyf8A4v2WP02f1UY8GzN/CHt96Krtx6W/ihZXk3r6l9PhHK4NE18Kqfj8E/5V8fIZo/zMJPB+S49HD7cLMcDFH+Vn/wDUM0/5kL/BErzyxxU68PFHqqM83JP+ZJD4Ac4UYf2VtePSPUK55Np9y2mF9PhxcX7K6KaVzm23+neA4m1ujH6KcVVTldLp3hLGhAuNv6KUQrnJLfYmj48IFMH6KSG5X44I2DhoRhKAB0QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBB8LQeyCN8DHdQFjQgfgRO/pCxoRnTIT/SFjxZ2+f+Lh/wAoTxNn/i4P8oWfE2f+Kg/yD9E8Wdvo0uAf0BNMeUpG6fA3+gLOjcpWYsTejQs6YStjYOgQZUEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBB//Z\"\n",
    "const chat = new ChatOpenAI({\n",
    "  modelName: \"gpt-4-vision-preview\",\n",
    "  maxTokens: 1024,\n",
    "});\n",
    "\n",
    "const dataUrlMessage = new HumanMessage({\n",
    "  content: [\n",
    "    {\n",
    "      type: \"text\",\n",
    "      text: \"What does this image contain?\",\n",
    "    },\n",
    "    {\n",
    "      type: \"image_url\",\n",
    "      image_url: {\n",
    "        url: `data:image/jpeg;base64,${imageBase64}`,\n",
    "      },\n",
    "    },\n",
    "  ],\n",
    "});\n",
    "\n",
    "await chain.invoke({\n",
    "  input: [\n",
    "    dataUrlMessage,\n",
    "  ],\n",
    "});"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Deno",
   "language": "typescript",
   "name": "deno"
  },
  "language_info": {
   "file_extension": ".ts",
   "mimetype": "text/x.typescript",
   "name": "typescript",
   "nb_converter": "script",
   "pygments_lexer": "typescript",
   "version": "5.2.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
